// 标签(GtkLabel)是GTK+中常用的构件，通常用于显示静态的不可编辑的内容
// 需要注意的是标签本身是没有信号输出的，如果需要进行交互操作，则需要配合是事件盒构件共同使用
/* 该案例是使用单选框和标签综合应用的实例，其根据用户的选择在标签中显示不同的内容*/
#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>

// 标签，由于其需要在回调函数中使用，必须使用全局变量
GtkWidget *label;

void button_deal(GtkWidget* widget, gpointer* data){
	// 修改标签的内容
	gtk_label_set_text(GTK_LABEL(label),(char*)data);
}

int main(int argc, char *argv[]){
	
	// 创建窗口、按钮和box的指针
	GtkWidget *window,*button,*box;
	// 单选框分组
	GSList *group = NULL;

	char title[] = "test";

	gtk_init(&argc, &argv);
	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title(GTK_WINDOW(window),title);
	gtk_widget_set_usize(window,200,200);
	gtk_widget_set_uposition(window,200,200);
	gtk_signal_connect(GTK_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL);

	// 创建一个新的总和box，纵向
	box = gtk_vbox_new(FALSE,0);

	// 创建标签
	label = gtk_label_new("PLZ check!");
	gtk_box_pack_start(GTK_BOX(box),label,FALSE,FALSE,15);

	// 创建按钮
	button = gtk_radio_button_new_with_label(group,"Radio Button1");
	// 将按钮添加到组中,因为单选框通常是通过组的形式存在的，因此使用radio_button时需要创建组group
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(button));
	gtk_box_pack_start(GTK_BOX(box),button,FALSE,FALSE,0);
	// 添加按钮1的pressed事件处理回调函数
	gtk_signal_connect(GTK_OBJECT(button),"pressed",GTK_SIGNAL_FUNC(button_deal),"check button1");
	
	gtk_widget_show(button);

	// 创建按钮2
	button = gtk_radio_button_new_with_label(group,"Radio Button2");
	// 将按钮添加到组中,因为单选框通常是通过组的形式存在的，因此使用radio_button时需要创建组group
	group = gtk_radio_button_group(GTK_RADIO_BUTTON(button));
	gtk_box_pack_start(GTK_BOX(box),button,FALSE,FALSE,0);
	// 添加按钮2的pressed事件处理回调函数
	gtk_signal_connect(GTK_OBJECT(button),"pressed",GTK_SIGNAL_FUNC(button_deal),"check button2");
	
	gtk_widget_show(button);

	// 将box加入到窗体中
	gtk_container_add(GTK_CONTAINER(window),box);
	
	gtk_widget_show(label);
	gtk_widget_show(box);
	gtk_widget_show(window);
	gtk_main();

	return 0;
}
